package Model;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name = "itemPedidoAssociado")
public class ItemPedidoAssociado implements Serializable {

   @Id
   @SequenceGenerator(name = "cod_item_pedido_associado", sequenceName = "cod_item_pedido_associado_seq", allocationSize = 1)
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cod_item_pedido_associado")
   @Column(name = "cod_item_pedido_associado")
   private int codItemPedidoAssociado;
   @Column(name = "quantidade")
   private double quantidade;
   @Column(name = "preco_unitario")
   private double precoUnitario;

   @ManyToOne(fetch = FetchType.EAGER, cascade = {javax.persistence.CascadeType.MERGE, javax.persistence.CascadeType.PERSIST})
   @JoinColumn(name = "cod_item_pedido_empresa")
   private ItemPedidoEmpresa itemPedidoEmpresa;


   @OneToOne(mappedBy = "itemPedidoAssociado", fetch = FetchType.LAZY, cascade = {javax.persistence.CascadeType.REMOVE})
   @Cascade({CascadeType.REFRESH})
   @Fetch(FetchMode.SELECT)
   private Venda venda;


   @Column (name = "quantidade_auxiliar")
   private double quantidadeAuxiliar;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="cod_item_previsao")
    @Fetch(FetchMode.SELECT)
    @Cascade(CascadeType.MERGE)
    private ItemPrevisao itemPrevisao;
   //Construtores
   //Construtor padrao
   public ItemPedidoAssociado() {
      quantidade = 0.00;
      precoUnitario = 0.00;
      comissao = 0.00;
      itemPedidoEmpresa = new ItemPedidoEmpresa();
      itemPrevisao = new ItemPrevisao();
      quantidadeAuxiliar = 0.0;
   }
   //Construtor com parametros
   //Construtor

   public ItemPedidoAssociado(int codItemPedidoAssociado, int quantidade, double precoUnitario,ItemPedidoEmpresa itemPedidoEmpresa, ItemPrevisao itemPrevisao) {
      this.codItemPedidoAssociado = this.getCodItemPedidoAssociado();
      this.precoUnitario = precoUnitario;
      this.quantidade = quantidade;
      this.itemPrevisao = itemPrevisao;
      this.itemPedidoEmpresa = itemPedidoEmpresa;
      this.quantidadeAuxiliar = quantidade;
   }

   //Metodos Get e Set
   public double getQuantidade() {
      return quantidade;
   }

   public void setQuantidade(double quantidade) {
      this.quantidade = quantidade;
   }

   public double getPrecoUnitario() {
      return precoUnitario;
   }

   public void setPrecoUnitario(double precoUnitario) {
      this.precoUnitario = precoUnitario;
   }

   public int getCodItemPedidoAssociado() {
      return codItemPedidoAssociado;
   }

   public void setCodItemPedidoAssociado(int codItemPedidoAssociado) {
      this.codItemPedidoAssociado = codItemPedidoAssociado;
   }

   public ItemPedidoEmpresa getItemPedidoEmpresa() {
      return itemPedidoEmpresa;
   }

   public void setItemPedidoEmpresa(ItemPedidoEmpresa itemPedidoEmpresa) {
      this.itemPedidoEmpresa = itemPedidoEmpresa;
   }

   public Venda getVenda() {
      return venda;
   }

   public void setVenda(Venda venda) {
      this.venda = venda;
   }


   @Transient
   public Double comissao;
   @Transient
   public double quantidadeCaixa;
   @Transient
   public double valorTotalAssociado;

   public double getQuantidadeCaixa() {
      quantidadeCaixa = 0.00;
      if(quantidade!=00 && itemPedidoEmpresa.getPesoCaixa()!=0.00){
         quantidadeCaixa = (quantidade / itemPedidoEmpresa.getPesoCaixa());
      }
      return quantidadeCaixa;
   }

   public void setQuantidadeCaixa(double quantidadeCaixa) {
      this.quantidadeCaixa = quantidadeCaixa;
   }

    public double getValorTotalAssociado() {
        valorTotalAssociado=0.0;
        valorTotalAssociado= precoUnitario*quantidade;
        return valorTotalAssociado;
    }

    public void setValorTotalAssociado(double valorTotalAssociado) {
        this.valorTotalAssociado = valorTotalAssociado;
    }

   public Double getComissao() {

      comissao = 0.00;
      comissao = itemPedidoEmpresa.getValorUnitario() - precoUnitario;
      return comissao;
   }

   public void setComissao(Double comissao) {
      this.comissao = comissao;
   }

    public ItemPrevisao getItemPrevisao() {
        return itemPrevisao;
    }
    public void setItemPrevisao(ItemPrevisao itemPrevisao) {
        this.itemPrevisao = itemPrevisao;
    }

    public double getQuantidadeAuxiliar() {
        return quantidadeAuxiliar;
    }

    public void setQuantidadeAuxiliar(double quantidadeAuxiliar) {
        this.quantidadeAuxiliar = quantidadeAuxiliar;
    }

}
